{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from turtle import goto\n",
    "from torch.autograd import Variable\n",
    "from utils.trainer import content_Trainer,stylecode_Trainer,shared_Trainer_condconv\n",
    "from utils.dataloader import Brats2D,split_dataset\n",
    "from torch.utils.data import DataLoader\n",
    "import torch\n",
    "import os\n",
    "import sys\n",
    "from tqdm import tqdm\n",
    "from torch.utils.tensorboard import SummaryWriter\n",
    "import torchvision\n",
    "from piq import ssim,psnr\n",
    "import numpy as np\n",
    "import random\n",
    "os.environ[\"CUDA_VISIBLE_DEVICES\"] = \"1\"\n",
    "trainer=stylecode_Trainer()\n",
    "trainer.cuda()\n",
    "x,y=split_dataset()\n",
    "train_set=Brats2D(x)\n",
    "test_set=Brats2D(y)\n",
    "train_loader = DataLoader(dataset=train_set, batch_size=1, shuffle=1, num_workers=4)\n",
    "test_loader=DataLoader(dataset=test_set, batch_size=1, shuffle=1, num_workers=4)\n",
    "display_size=1\n",
    "step=0\n",
    "for i, (x1,x2,x3,x4, seg) in enumerate(test_loader):\n",
    "    x1_test,x2_test,x3_test,x4_test=x1.cuda().detach(),x2.cuda().detach(),x3.cuda(),x4.cuda().detach() \n",
    "    break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trainer.eval()\n",
    "trainer.load_state_dict(torch.load(\"saved/best0_ReMIC_23.pth\")['net'])\n",
    "#trainer=torch.load(\"saved/testall.pth\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "with torch.no_grad():\n",
    "    outputs = trainer.sample(x1_test,x2_test,x3_test,x4_test,label=[0,0,1,0])\n",
    "    plt.imshow(np.array( (((outputs[1]+1)/2)[0]).cpu()   )  ,cmap=\"gray\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([18.6899])\n",
      "tensor(0.7514)\n"
     ]
    }
   ],
   "source": [
    "ps_metric=0\n",
    "ss_metric=0\n",
    "for i, (x1,x2,x3,x4, seg) in enumerate(test_loader):\n",
    "    x1,x2,x3,x4=x1.cuda().detach(),x2.cuda().detach(),x3.cuda(),x4.cuda().detach()  \n",
    "    trainer.eval()\n",
    "    output=trainer.sample(x1,x2,x3,x4,label=[0,0,1,0])\n",
    "    #output=trainer.sample(x1,x2,x3,x4)\n",
    "    ps_metric+=psnr(((output[5]+1)/2).unsqueeze(0).cpu().detach(),((x3+1)/2).cpu().detach(), data_range=1., reduction='none')\n",
    "    ss_metric+=ssim(((output[5]+1)/2).unsqueeze(0).cpu().detach(),((x3+1)/2).cpu().detach(), data_range=1.)\n",
    "    torch.cuda.synchronize()\n",
    "print(ps_metric/len(test_set))\n",
    "print(ss_metric/len(test_set))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "7515"
   ]
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "bae20a30aaa6b65d7789b563ff3fa506e1435ad057272c389596a489901a5e70"
  },
  "kernelspec": {
   "display_name": "Python 3.8.8 64-bit ('monai': conda)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
